package dao

import (
	"time"
)

// 这是 User 的全局公开dao对象，被service层调用!
var UserDao = userDao{}

// 用户表
// 这是 user表 的实体类,这个实体类中的字段可以减少，但是不能在其基础上增加!
type User struct {
	Id            int32     `json:"id" form:"id" v:"id" db:"id"`
	Username      string    `json:"username" form:"username" v:"username" db:"username"`                             // 用户名称
	Password      string    `json:"password" form:"password" v:"password" db:"password"`                             // 用户密码
	Gender        int8      `json:"gender" form:"gender" v:"gender" db:"gender"`                                     // 性别：0 未知， 1男， 1 女
	Birthday      string    `json:"birthday" form:"birthday" v:"birthday" db:"birthday"`                             // 生日
	LastLoginTime time.Time `json:"last_login_time" form:"last_login_time" v:"last_login_time" db:"last_login_time"` // 最近一次登录时间
	LastLoginIp   string    `json:"last_login_ip" form:"last_login_ip" v:"last_login_ip" db:"last_login_ip"`         // 最近一次登录IP地址
	UserLevel     int8      `json:"user_level" form:"user_level" v:"user_level" db:"user_level"`                     // 0 普通用户，1 VIP用户，2 高级VIP用户
	Nickname      string    `json:"nickname" form:"nickname" v:"nickname" db:"nickname"`                             // 用户昵称或网络名称
	Mobile        string    `json:"mobile" form:"mobile" v:"mobile" db:"mobile"`                                     // 用户手机号码
	Avatar        string    `json:"avatar" form:"avatar" v:"avatar" db:"avatar"`                                     // 用户头像图片
	Openid        string    `json:"openid" form:"openid" v:"openid" db:"openid"`                                     // 微信登录openid
	SessionKey    string    `json:"session_key" form:"session_key" v:"session_key" db:"session_key"`                 // 微信登录会话KEY
	Status        int8      `json:"status" form:"status" v:"status" db:"status"`                                     // 0 可用, 1 禁用, 2 注销
	AddTime       time.Time `json:"add_time" form:"add_time" v:"add_time" db:"add_time"`                             // 创建时间
	UpdateTime    time.Time `json:"update_time" form:"update_time" v:"update_time" db:"update_time"`                 // 更新时间
	Deleted       int8      `json:"deleted" form:"deleted" v:"deleted" db:"deleted" gm:"deleted"`                    // 逻辑删除

}

// 注意:这是 User 的私有dao对象，只能在dao层内使用!
type userDao struct {
	InsertTemplate func(arg User) (int64, error)      //插入一条记录
	UpdateTemplate func(arg User) (int64, error)      //更新一条记录
	DeleteTemplate func(id int64) (int64, error)      `args:"id"` //根据传入的主键删除一条记录
	SelectTemplate func(id int64) (User, error)       `args:"id"` //根据传入的主键获取一条记录
	List           func(arg UserList) ([]User, error) //模糊分页查询
}

/*
// 这是 user 表的Postman测试参数
// 该结构体中的字段就是: 前后端交互的json字段!
type UserPostman struct {
id
username
password
gender
birthday
last_login_time
last_login_ip
user_level
nickname
mobile
avatar
openid
session_key
status
add_time
update_time
deleted

}*/

// 这是 user 表的批量请求参数
type UserReq struct {
	List []User `json:"list" form:"list"`
}

// 这是 userDao.List()方法的请求参数
type UserList struct {
	Page
}
